home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / var / lib / dpkg / info / x11-common.config < prev    next >
Encoding:
Text File  |  2011-12-16  |  22.2 KB  |  711 lines

  1. #!/bin/sh
  2. # Debian x11-common package configuration script
  3. # Copyright 2000--2003 Branden Robinson.
  4. # Licensed under the GNU General Public License, version 2.  See the file
  5. # /usr/share/common-licenses/GPL or <http://www.gnu.org/copyleft/gpl.txt>.
  6.  
  7. set -e
  8.  
  9. # source debconf library
  10. . /usr/share/debconf/confmodule
  11.  
  12. THIS_PACKAGE=x11-common
  13. THIS_SCRIPT=config
  14.  
  15. # This is the X Strike Force shell library for X Window System package
  16. # maintainer scripts.  It serves to define shell functions commonly used by
  17. # such packages, and performs some error checking necessary for proper operation
  18. # of those functions.  By itself, it does not "do" much; the maintainer scripts
  19. # invoke the functions defined here to accomplish package installation and
  20. # removal tasks.
  21.  
  22. # If you are reading this within a Debian package maintainer script (e.g.,
  23. # /var/lib/dpkg/info/PACKAGE.{config,preinst,postinst,prerm,postrm}), you can
  24. # skip past this library by scanning forward in this file to the string
  25. # "GOBSTOPPER".
  26.  
  27. SOURCE_VERSION=1:7.5+8+squeeze1
  28. OFFICIAL_BUILD=
  29.  
  30. # Use special abnormal exit codes so that problems with this library are more
  31. # easily tracked down.
  32. SHELL_LIB_INTERNAL_ERROR=86
  33. SHELL_LIB_THROWN_ERROR=74
  34. SHELL_LIB_USAGE_ERROR=99
  35.  
  36. # old -> new variable names
  37. if [ -z "$DEBUG_XORG_PACKAGE" ] && [ -n "$DEBUG_XFREE86_PACKAGE" ]; then
  38.   DEBUG_XORG_PACKAGE="$DEBUG_XFREE86_PACKAGE"
  39. fi
  40. if [ -z "$DEBUG_XORG_DEBCONF" ] && [ -n "$DEBUG_XFREE86_DEBCONF" ]; then
  41.   DEBUG_XORG_DEBCONF="$DEBUG_XFREE86_DEBCONF"
  42. fi
  43.  
  44. # initial sanity checks
  45. if [ -z "$THIS_PACKAGE" ]; then
  46.   cat >&2 <<EOF
  47. Error: package maintainer script attempted to use shell library without
  48. definining \$THIS_PACKAGE shell variable.  Please report the package name,
  49. version, and the text of this error message to the Debian Bug Tracking System.
  50. Visit <http://www.debian.org/Bugs/Reporting> on the World Wide Web for
  51. instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the
  52. "doc-debian" package, or install the "reportbug" package and use the command of
  53. the same name to file a report against version $SOURCE_VERSION of this package.
  54. EOF
  55.   exit $SHELL_LIB_USAGE_ERROR
  56. fi
  57.  
  58. if [ -z "$THIS_SCRIPT" ]; then
  59.   cat >&2 <<EOF
  60. Error: package maintainer script attempted to use shell library without
  61. definining \$THIS_SCRIPT shell variable.  Please report the package name,
  62. version, and the text of this error message to the Debian Bug Tracking System.
  63. Visit <http://www.debian.org/Bugs/Reporting> on the World Wide Web for
  64. instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the
  65. "doc-debian" package, or install the "reportbug" package and use the command of
  66. the same name to file a report against version $SOURCE_VERSION of the
  67. "$THIS_PACKAGE" package.
  68. EOF
  69.   exit $SHELL_LIB_USAGE_ERROR
  70. fi
  71.  
  72. if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ]; then
  73.   RECONFIGURE="true"
  74. else
  75.   RECONFIGURE=
  76. fi
  77.  
  78. if ([ "$1" = "install" ] || [ "$1" = "configure" ]) && [ -z "$2" ]; then
  79.   FIRSTINST="yes"
  80. fi
  81.  
  82. if [ -z "$RECONFIGURE" ] && [ -z "$FIRSTINST" ]; then
  83.   UPGRADE="yes"
  84. fi
  85.  
  86. trap "message;\
  87.       message \"Received signal.  Aborting $THIS_PACKAGE package $THIS_SCRIPT script.\";\
  88.       message;\
  89.       exit 1" HUP INT QUIT TERM
  90.  
  91. reject_nondigits () {
  92.   # syntax: reject_nondigits [ operand ... ]
  93.   #
  94.   # scan operands (typically shell variables whose values cannot be trusted) for
  95.   # characters other than decimal digits and barf if any are found
  96.   while [ -n "$1" ]; do
  97.     # does the operand contain anything but digits?
  98.     if ! expr "$1" : "[[:digit:]]\+$" > /dev/null 2>&1; then
  99.       # can't use die(), because it wraps message() which wraps this function
  100.       echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_nondigits() encountered" \
  101.            "possibly malicious garbage \"$1\"" >&2
  102.       exit $SHELL_LIB_THROWN_ERROR
  103.     fi
  104.     shift
  105.   done
  106. }
  107.  
  108. reject_unlikely_path_chars () {
  109.   # syntax: reject_unlikely_path_chars [ operand ... ]
  110.   #
  111.   # scan operands (typically shell variables whose values cannot be trusted) for
  112.   # characters unlikely to be seen in a path and which the shell might
  113.   # interpret and barf if any are found
  114.   while [ -n "$1" ]; do
  115.     # does the operand contain any funny characters?
  116.     if expr "$1" : '.*[!$&()*;<>?|].*' > /dev/null 2>&1; then
  117.       # can't use die(), because I want to avoid forward references
  118.       echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_unlikely_path_chars()" \
  119.            "encountered possibly malicious garbage \"$1\"" >&2
  120.       exit $SHELL_LIB_THROWN_ERROR
  121.     fi
  122.     shift
  123.   done
  124. }
  125.  
  126. # Query the terminal to establish a default number of columns to use for
  127. # displaying messages to the user.  This is used only as a fallback in the
  128. # event the COLUMNS variable is not set.  ($COLUMNS can react to SIGWINCH while
  129. # the script is running, and this cannot, only being calculated once.)
  130. DEFCOLUMNS=$(stty size 2> /dev/null | awk '{print $2}') || true
  131. if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" > /dev/null 2>&1; then
  132.   DEFCOLUMNS=80
  133. fi
  134.  
  135. message () {
  136.   # pretty-print messages of arbitrary length
  137.   reject_nondigits "$COLUMNS"
  138.   echo "$*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} >&2
  139. }
  140.  
  141. observe () {
  142.   # syntax: observe message ...
  143.   #
  144.   # issue observational message suitable for logging someday when support for
  145.   # it exists in dpkg
  146.   if [ -n "$DEBUG_XORG_PACKAGE" ]; then
  147.     message "$THIS_PACKAGE $THIS_SCRIPT note: $*"
  148.   fi
  149. }
  150.  
  151. warn () {
  152.   # syntax: warn message ...
  153.   #
  154.   # issue warning message suitable for logging someday when support for
  155.   # it exists in dpkg; also send to standard error
  156.   message "$THIS_PACKAGE $THIS_SCRIPT warning: $*"
  157. }
  158.  
  159. die () {
  160.   # syntax: die message ...
  161.   #
  162.   # exit script with error message
  163.   message "$THIS_PACKAGE $THIS_SCRIPT error: $*"
  164.   exit $SHELL_LIB_THROWN_ERROR
  165. }
  166.  
  167. internal_error () {
  168.   # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
  169.   message "internal error: $*"
  170.   if [ -n "$OFFICIAL_BUILD" ]; then
  171.     message "Please report a bug in the $THIS_SCRIPT script of the" \
  172.             "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \
  173.             "Tracking System.  Include all messages above that mention the" \
  174.             "$THIS_PACKAGE package.  Visit " \
  175.             "<http://www.debian.org/Bugs/Reporting> on the World Wide Web for" \
  176.             "instructions, read the file" \
  177.             "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \
  178.             "package, or install the reportbug package and use the command of" \
  179.             "the same name to file a report."
  180.   fi
  181.   exit $SHELL_LIB_INTERNAL_ERROR
  182. }
  183.  
  184. usage_error () {
  185.   message "usage error: $*"
  186.   message "Please report a bug in the $THIS_SCRIPT script of the" \
  187.           "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \
  188.           "Tracking System.  Include all messages above that mention the" \
  189.           "$THIS_PACKAGE package.  Visit " \
  190.           "<http://www.debian.org/Bugs/Reporting> on the World Wide Web for" \
  191.           "instructions, read the file" \
  192.           "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \
  193.           "package, or install the reportbug package and use the command of" \
  194.           "the same name to file a report."
  195.   exit $SHELL_LIB_USAGE_ERROR
  196. }
  197.  
  198. font_update () {
  199.   # run $UPDATECMDS in $FONTDIRS
  200.  
  201.   local dir cmd shortcmd x_font_dir_prefix
  202.  
  203.   x_font_dir_prefix="/usr/share/fonts/X11"
  204.  
  205.   if [ -z "$UPDATECMDS" ]; then
  206.     usage_error "font_update() called but \$UPDATECMDS not set"
  207.   fi
  208.   if [ -z "$FONTDIRS" ]; then
  209.     usage_error "font_update() called but \$FONTDIRS not set"
  210.   fi
  211.  
  212.   reject_unlikely_path_chars "$UPDATECMDS"
  213.   reject_unlikely_path_chars "$FONTDIRS"
  214.  
  215.   for dir in $FONTDIRS; do
  216.     if [ -d "$x_font_dir_prefix/$dir" ]; then
  217.       for cmd in $UPDATECMDS; do
  218.         if which "$cmd" > /dev/null 2>&1; then
  219.           shortcmd=${cmd##*/}
  220.           observe "running $shortcmd in $dir font directory"
  221.       cmd_opts=
  222.           if [ "$shortcmd" = "update-fonts-alias" ]; then
  223.             cmd_opts=--x11r7-layout
  224.           fi
  225.           if [ "$shortcmd" = "update-fonts-dir" ]; then
  226.             cmd_opts=--x11r7-layout
  227.           fi
  228.           if [ "$shortcmd" = "update-fonts-scale" ]; then
  229.             cmd_opts=--x11r7-layout
  230.           fi
  231.           $cmd $cmd_opts $dir || warn "$cmd $cmd_opts $dir" \
  232.                               "failed; font directory data may not" \
  233.                               "be up to date"
  234.         else
  235.           warn "$cmd not found; not updating corresponding $dir font" \
  236.                "directory data"
  237.         fi
  238.       done
  239.     else
  240.       warn "$dir is not a directory; not updating font directory data"
  241.     fi
  242.   done
  243. }
  244.  
  245. remove_conffile_prepare () {
  246.   # syntax: remove_conffile_prepare filename official_md5sum ...
  247.   #
  248.   # Check a conffile "filename" against a list of canonical MD5 checksums.
  249.   # If the file's current MD5 checksum matches one of the "official_md5sum"
  250.   # operands provided, then prepare the conffile for removal from the system.
  251.   # We defer actual deletion until the package is configured so that we can
  252.   # roll this operation back if package installation fails.
  253.   #
  254.   # Call this function from a preinst script in the event $1 is "upgrade" or
  255.   # "install" and verify $2 to ensure the package is being upgraded from a
  256.   # version (or installed over a version removed-but-not-purged) prior to the
  257.   # one in which the conffile was obsoleted.
  258.  
  259.   local conffile current_checksum
  260.  
  261.   # validate arguments
  262.   if [ $# -lt 2 ]; then
  263.     usage_error "remove_conffile_prepare() called with wrong number of" \
  264.                 "arguments; expected at least 2, got $#"
  265.     exit $SHELL_LIB_USAGE_ERROR
  266.   fi
  267.  
  268.   conffile="$1"
  269.   shift
  270.  
  271.   # does the conffile even exist?
  272.   if [ -e "$conffile" ]; then
  273.     # calculate its checksum
  274.     current_checksum=$(md5sum < "$conffile" | sed 's/[[:space:]].*//')
  275.     # compare it to each supplied checksum
  276.     while [ -n "$1" ]; do
  277.       if [ "$current_checksum" = "$1" ]; then
  278.         # we found a match; move the confffile and stop looking
  279.         observe "preparing obsolete conffile $conffile for removal"
  280.         mv "$conffile" "$conffile.$THIS_PACKAGE-tmp"
  281.         break
  282.       fi
  283.       shift
  284.     done
  285.   fi
  286. }
  287.  
  288. remove_conffile_lookup () {
  289.   # syntax: remove_conffile_lookup package filename
  290.   #
  291.   # Lookup the md5sum of a conffile in dpkg's database, and prepare for removal
  292.   # if it matches the actual file's md5sum.
  293.   #
  294.   # Call this function when you would call remove_conffile_prepare but only
  295.   # want to check against dpkg's status database instead of known checksums.
  296.  
  297.   local package conffile old_md5sum
  298.  
  299.   # validate arguments
  300.   if [ $# -ne 2 ]; then
  301.     usage_error "remove_conffile_lookup() called with wrong number of" \
  302.                 "arguments; expected 1, got $#"
  303.     exit $SHELL_LIB_USAGE_ERROR
  304.   fi
  305.  
  306.   package="$1"
  307.   conffile="$2"
  308.  
  309.   if ! [ -e "$conffile" ]; then
  310.     return
  311.   fi
  312.   old_md5sum="$(dpkg-query -W -f='${Conffiles}' "$package" | \
  313.     awk '{ if (match($0, "^ '"$conffile"' ")) print $2}')"
  314.   if [ -n "$old_md5sum" ]; then
  315.     remove_conffile_prepare "$conffile" "$old_md5sum"
  316.   fi
  317. }
  318.  
  319. remove_conffile_commit () {
  320.   # syntax: remove_conffile_commit filename
  321.   #
  322.   # Complete the removal of a conffile "filename" that has become obsolete.
  323.   #
  324.   # Call this function from a postinst script after having used
  325.   # remove_conffile_prepare() in the preinst.
  326.  
  327.   local conffile
  328.  
  329.   # validate arguments
  330.   if [ $# -ne 1 ]; then
  331.     usage_error "remove_conffile_commit() called with wrong number of" \
  332.                 "arguments; expected 1, got $#"
  333.     exit $SHELL_LIB_USAGE_ERROR
  334.   fi
  335.  
  336.   conffile="$1"
  337.  
  338.   # if the temporary file created by remove_conffile_prepare() exists, remove it
  339.   if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then
  340.     observe "committing removal of obsolete conffile $conffile"
  341.     rm "$conffile.$THIS_PACKAGE-tmp"
  342.   fi
  343. }
  344.  
  345. remove_conffile_rollback () {
  346.   # syntax: remove_conffile_rollback filename
  347.   #
  348.   # Roll back the removal of a conffile "filename".
  349.   #
  350.   # Call this function from a postrm script in the event $1 is "abort-upgrade"
  351.   # or "abort-install" is  after having used remove_conffile_prepare() in the
  352.   # preinst.
  353.  
  354.   local conffile
  355.  
  356.   # validate arguments
  357.   if [ $# -ne 1 ]; then
  358.     usage_error "remove_conffile_rollback() called with wrong number of" \
  359.                 "arguments; expected 1, got $#"
  360.     exit $SHELL_LIB_USAGE_ERROR
  361.   fi
  362.  
  363.   conffile="$1"
  364.  
  365.   # if the temporary file created by remove_conffile_prepare() exists, move it
  366.   # back
  367.   if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then
  368.     observe "rolling back removal of obsolete conffile $conffile"
  369.     mv "$conffile.$THIS_PACKAGE-tmp" "$conffile"
  370.   fi
  371. }
  372.  
  373. replace_conffile_with_symlink_prepare () {
  374.   # syntax: replace_conffile_with_symlink_prepare oldfilename newfilename \
  375.   # official_md5sum ...
  376.   #
  377.   # Check a conffile "oldfilename" against a list of canonical MD5 checksums.
  378.   # If the file's current MD5 checksum matches one of the "official_md5sum"
  379.   # operands provided, then prepare the conffile for removal from the system.
  380.   # We defer actual deletion until the package is configured so that we can
  381.   # roll this operation back if package installation fails. Otherwise copy it
  382.   # to newfilename and let dpkg handle it through conffiles mechanism.
  383.   #
  384.   # Call this function from a preinst script in the event $1 is "upgrade" or
  385.   # "install" and verify $2 to ensure the package is being upgraded from a
  386.   # version (or installed over a version removed-but-not-purged) prior to the
  387.   # one in which the conffile was obsoleted.
  388.  
  389.   local conffile current_checksum
  390.  
  391.   # validate arguments
  392.   if [ $# -lt 3 ]; then
  393.     usage_error "replace_conffile_with_symlink_prepare() called with wrong" \
  394.                 " number of arguments; expected at least 3, got $#"
  395.     exit $SHELL_LIB_USAGE_ERROR
  396.   fi
  397.  
  398.   oldconffile="$1"
  399.   shift
  400.   newconffile="$1"
  401.   shift
  402.  
  403.   remove_conffile_prepare "$_oldconffile" "$@"
  404.   # If $oldconffile still exists, then md5sums didn't match.
  405.   # Copy it to new one.
  406.   if [ -f "$oldconffile" ]; then
  407.     cp "$oldconffile" "$newconffile"
  408.   fi
  409.  
  410. }
  411.  
  412. replace_conffile_with_symlink_commit () {
  413.   # syntax: replace_conffile_with_symlink_commit oldfilename
  414.   #
  415.   # Complete the removal of a conffile "oldfilename" that has been
  416.   # replaced by a symlink.
  417.   #
  418.   # Call this function from a postinst script after having used
  419.   # replace_conffile_with_symlink_prepare() in the preinst.
  420.  
  421.   local conffile
  422.  
  423.   # validate arguments
  424.   if [ $# -ne 1 ]; then
  425.     usage_error "replace_conffile_with_symlink_commit() called with wrong" \
  426.                 "number of arguments; expected 1, got $#"
  427.     exit $SHELL_LIB_USAGE_ERROR
  428.   fi
  429.  
  430.   conffile="$1"
  431.  
  432.   remove_conffile_commit "$conffile"
  433. }
  434.  
  435. replace_conffile_with_symlink_rollback () {
  436.   # syntax: replace_conffile_with_symlink_rollback oldfilename newfilename
  437.   #
  438.   # Roll back the replacing of a conffile "oldfilename" with symlink to
  439.   # "newfilename".
  440.   #
  441.   # Call this function from a postrm script in the event $1 is "abort-upgrade"
  442.   # or "abort-install" and verify $2 to ensure the package failed to upgrade
  443.   # from a version (or install over a version removed-but-not-purged) prior
  444.   # to the one in which the conffile was obsoleted.
  445.   # You should have  used replace_conffile_with_symlink_prepare() in the
  446.   # preinst.
  447.  
  448.   local conffile
  449.  
  450.   # validate arguments
  451.   if [ $# -ne 2 ]; then
  452.     usage_error "replace_conffile_with_symlink_rollback() called with wrong" \
  453.                 "number of arguments; expected 2, got $#"
  454.     exit $SHELL_LIB_USAGE_ERROR
  455.   fi
  456.  
  457.   oldconffile="$1"
  458.   newconffile="$2"
  459.  
  460.   remove_conffile_rollback "$_oldconffile"
  461.   if [ -f "$newconffile" ]; then
  462.     rm "$newconffile"
  463.   fi
  464. }
  465.  
  466. run () {
  467.   # syntax: run command [ argument ... ]
  468.   #
  469.   # Run specified command with optional arguments and report its exit status.
  470.   # Useful for commands whose exit status may be nonzero, but still acceptable,
  471.   # or commands whose failure is not fatal to us.
  472.   #
  473.   # NOTE: Do *not* use this function with db_get or db_metaget commands; in
  474.   # those cases the return value of the debconf command *must* be checked
  475.   # before the string returned by debconf is used for anything.
  476.  
  477.   local retval
  478.  
  479.   # validate arguments
  480.   if [ $# -lt 1 ]; then
  481.     usage_error "run() called with wrong number of arguments; expected at" \
  482.                 "least 1, got $#"
  483.     exit $SHELL_LIB_USAGE_ERROR
  484.   fi
  485.  
  486.   "$@" || retval=$?
  487.  
  488.   if [ ${retval:-0} -ne 0 ]; then
  489.     observe "command \"$*\" exited with status $retval"
  490.   fi
  491. }
  492.  
  493. make_symlink_sane () {
  494.   # syntax: make_symlink_sane symlink target
  495.   #
  496.   # Ensure that the symbolic link symlink exists, and points to target.
  497.   #
  498.   # If symlink does not exist, create it and point it at target.
  499.   #
  500.   # If symlink exists but is not a symbolic link, back it up.
  501.   #
  502.   # If symlink exists, is a symbolic link, but points to the wrong location, fix
  503.   # it.
  504.   #
  505.   # If symlink exists, is a symbolic link, and already points to target, do
  506.   # nothing.
  507.   #
  508.   # This function wouldn't be needed if ln had an -I, --idempotent option.
  509.  
  510.   # Validate arguments.
  511.   if [ $# -ne 2 ]; then
  512.     usage_error "make_symlink_sane() called with wrong number of arguments;" \
  513.       "expected 2, got $#"
  514.     exit $SHELL_LIB_USAGE_ERROR
  515.   fi
  516.  
  517.   # We could just use the positional parameters as-is, but that makes things
  518.   # harder to follow.
  519.   local symlink target
  520.  
  521.   symlink="$1"
  522.   target="$2"
  523.  
  524.   if [ -L "$symlink" ] && [ "$(readlink "$symlink")" = "$target" ]; then
  525.       observe "link from $symlink to $target already exists"
  526.   else
  527.     observe "creating symbolic link from $symlink to $target"
  528.     mkdir -p "${target%/*}" "${symlink%/*}"
  529.     ln -s -b -S ".dpkg-old" "$target" "$symlink"
  530.   fi
  531. }
  532.  
  533. migrate_dir_to_symlink () {
  534.   # syntax: migrate_dir_to_symlink old_location new_location
  535.   #
  536.   # Per Debian Policy section 6.5.4, "A directory will never be replaced by a
  537.   # symbolic link to a directory or vice versa; instead, the existing state
  538.   # (symlink or not) will be left alone and dpkg will follow the symlink if
  539.   # there is one."
  540.   #
  541.   # We have to do it ourselves.
  542.   #
  543.   # This function moves the contents of old_location, a directory, into
  544.   # new_location, a directory, then makes old_location a symbolic link to
  545.   # new_location.
  546.   #
  547.   # old_location need not exist, but if it does, it must be a directory (or a
  548.   # symlink to a directory).  If it is not, it is backed up.  If new_location
  549.   # exists already and is not a directory, it is backed up.
  550.   #
  551.   # This function should be called from a package's preinst so that other
  552.   # packages unpacked after this one --- but before this package's postinst runs
  553.   # --- are unpacked into new_location even if their payloads contain
  554.   # old_location filespecs.
  555.  
  556.   # Validate arguments.
  557.   if [ $# -ne 2 ]; then
  558.     usage_error "migrate_dir_to_symlink() called with wrong number of"
  559.                 "arguments; expected 2, got $#"
  560.     exit $SHELL_LIB_USAGE_ERROR
  561.   fi
  562.  
  563.   # We could just use the positional parameters as-is, but that makes things
  564.   # harder to follow.
  565.   local new old
  566.  
  567.   old="$1"
  568.   new="$2"
  569.  
  570.   # Is old location a symlink?
  571.   if [ -L "$old" ]; then
  572.     # Does it already point to new location?
  573.     if [ "$(readlink "$old")" = "$new" ]; then
  574.       # Nothing to do; migration has already been done.
  575.       observe "migration of $old to $new already done"
  576.       return 0
  577.     else
  578.       # Back it up.
  579.       warn "backing up symbolic link $old as $old.dpkg-old"
  580.       mv -b "$old" "$old.dpkg-old"
  581.     fi
  582.   fi
  583.  
  584.   # Does old location exist, but is not a directory?
  585.   if [ -e "$old" ] && ! [ -d "$old" ]; then
  586.       # Back it up.
  587.       warn "backing up non-directory $old as $old.dpkg-old"
  588.       mv -b "$old" "$old.dpkg-old"
  589.   fi
  590.  
  591.   observe "migrating $old to $new"
  592.  
  593.   # Is new location a symlink?
  594.   if [ -L "$new" ]; then
  595.     # Does it point the wrong way, i.e., back to where we're migrating from?
  596.     if [ "$(readlink "$new")" = "$old" ]; then
  597.       # Get rid of it.
  598.       observe "removing symbolic link $new which points to $old"
  599.       rm "$new"
  600.     else
  601.       # Back it up.
  602.       warn "backing up symbolic link $new as $new.dpkg-old"
  603.       mv -b "$new" "$new.dpkg-old"
  604.     fi
  605.   fi
  606.  
  607.   # Does new location exist, but is not a directory?
  608.   if [ -e "$new" ] && ! [ -d "$new" ]; then
  609.     warn "backing up non-directory $new as $new.dpkg-old"
  610.     mv -b "$new" "$new.dpkg-old"
  611.   fi
  612.  
  613.   # Create new directory if it does not yet exist.
  614.   if ! [ -e "$new" ]; then
  615.     observe "creating $new"
  616.     mkdir -p "$new"
  617.   fi
  618.  
  619.   # Copy files in old location to new location.  Back up any filenames that
  620.   # already exist in the new location with the extension ".dpkg-old".
  621.   observe "copying files from $old to $new"
  622.   if ! (cd "$old" && cp -a -b -S ".dpkg-old" . "$new"); then
  623.     die "error(s) encountered while copying files from $old to $new"
  624.   fi
  625.  
  626.   # Remove files at old location.
  627.   observe "removing $old"
  628.   rm -r "$old"
  629.  
  630.   # Create symlink from old location to new location.
  631.   make_symlink_sane "$old" "$new"
  632. }
  633.  
  634. # vim:set ai et sw=2 ts=2 tw=80:
  635.  
  636. # GOBSTOPPER: The X Strike Force shell library ends here.
  637.  
  638. CONFIG_DIR=/etc/X11
  639. XWRAPPER_CONFIG="$CONFIG_DIR/Xwrapper.config"
  640.  
  641. allowed_users_english_to_actual () {
  642.   case "$1" in
  643.     "Root Only")
  644.       echo "rootonly"
  645.       ;;
  646.     "Console Users Only")
  647.       echo "console"
  648.       ;;
  649.     "Anybody")
  650.       echo "anybody"
  651.       ;;
  652.     *)
  653.       # garbage input; return default
  654.       observe "allowed_users_english_to_actual(): unrecognized input \"$1\";" \
  655.               "using default"
  656.       echo "console"
  657.       ;;
  658.   esac
  659. }
  660.  
  661. allowed_users_actual_to_english () {
  662.   case "$1" in
  663.     "rootonly")
  664.       echo "Root Only"
  665.       ;;
  666.     "console")
  667.       echo "Console Users Only"
  668.       ;;
  669.     "anybody")
  670.       echo "Anybody"
  671.       ;;
  672.     *)
  673.       # garbage input; return default
  674.       observe "allowed_users_actual_to_english(): unrecognized input \"$1\";" \
  675.               "using default"
  676.       echo "Console Users Only"
  677.       ;;
  678.   esac
  679. }
  680.  
  681. CURRENT_ALLOWED_USERS=
  682.  
  683. # scan the X wrapper config file for existing settings, if it exists
  684. if [ -e "$XWRAPPER_CONFIG" ]; then
  685.   if MATCHES=$(grep "^allowed_users=.\+" "$XWRAPPER_CONFIG"); then
  686.     CURRENT_ALLOWED_USERS=$(echo "${MATCHES##*=}" | head -n 1)
  687.   fi
  688. fi
  689.  
  690. if [ -n "$CURRENT_ALLOWED_USERS" ]; then
  691.   observe "setting x11-common/xwrapper/allowed_users from configuration" \
  692.           "file"
  693.   run db_set x11-common/xwrapper/allowed_users \
  694.                       $(allowed_users_actual_to_english \
  695.                       "$CURRENT_ALLOWED_USERS")
  696. fi
  697.  
  698. run db_input low x11-common/xwrapper/allowed_users
  699. run db_go
  700.  
  701. RET=
  702. if db_get x11-common/xwrapper/allowed_users; then
  703.   if [ -n "$RET" ]; then
  704.     run db_set x11-common/xwrapper/actual_allowed_users \
  705.                         $(allowed_users_english_to_actual "$RET")
  706.   fi
  707. fi
  708. exit 0
  709.  
  710. # vim:set ai et sts=2 sw=2 tw=0:
  711.